//
// Created by 王小龙 on 24-5-22.
//

#ifndef LOGGER_H
#define LOGGER_H

#include <string>
#include <mutex>
#include <fstream>

// 日志级别枚举
enum class LogLevel {
    INFO,
    WARNING,
    ERROR
};

// 日志工具类
class Logger {
    public:
        // 获取日志实例的静态方法
        static Logger & Instance();

        // 记录日志的方法
        void Log(const std::string&message, enum LogLevel level);

        // 禁止拷贝构造和赋值
        Logger(const Logger &) = delete;
        Logger & operator = (const Logger &) = delete;

    private:
        std::ofstream logFile; // 日志文件流
        std::mutex mut; // 用于同步的互斥锁

        // 私有构造函数
        Logger();

        // 析构函数
        ~Logger();

        // 格式化日志信息
        std::string FormatMessage(const std::string&message, enum LogLevel level);
};


#define LOG_INFO(message) Logger::Instance().Log(message, LogLevel::INFO)
#define LOG_WARNING(message) Logger::Instance().Log(message, LogLevel::WARNING)
#define LOG_ERROR(message) Logger::Instance().Log(message, LogLevel::ERROR)


#endif // LOGGER_H
